/*
    获取文件的类型，判断此文件对于其它用户（Other）是否具有可读可写权限。
*/

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
    struct stat file_stat;
    int ret;

    /*  获取文件属性    */
    ret = stat("./src_file",&file_stat);
    if(-1 == ret){
        perror("stat error");
        exit(-1);
    }

    /*  判断文件属性    */
    switch(file_stat.st_mode & S_IFMT)
    {
        case S_IFSOCK: printf("socket");break;              //是不是套接字文件
        case S_IFLNK: printf("symbolic link"); break;       //是不是链接文件
        case S_IFREG: printf("regular file"); break;        //是不是普通文件
        case S_IFBLK: printf("block device"); break;        //是不是块设备文件
        case S_IFDIR: printf("directory"); break;           //是不是目录文件
        case S_IFCHR: printf("character device"); break;    //是不是字符设备文件
        case S_IFIFO: printf("FIFO"); break;                //是不是管道文件
        
    }
    printf("\n");

/*  判断该文件对其他用户是否具有读到权限    */
        if(file_stat.st_mode & S_IROTH)
        {
            printf("Read:Yes\n");
        }
        else
        {
            printf("Read:No\n");
        }
        
        /*  判断该文件对其他用户是否具有写到权限    */
        if(file_stat.st_mode & S_IWOTH)
        {
            printf("Write:Yes\n");
        }
        else
        {
            printf("Write:No\n");
        }   

        exit(0);        
}